// package com.github.binarywang.demo.wx.miniapp.controller;// package com.miniapp.blog.web.controller;
//
// import cn.hutool.system.UserInfo;
// import com.github.binarywang.demo.wx.miniapp.model.Result;
// import org.springframework.web.bind.annotation.*;
//
// import javax.xml.bind.DatatypeConverter;
//
// /**
//  * 微信小程序用户接口
//  *
//  * @author <a href="https://github.com/binarywang">Binary Wang</a>
//  */
// @RestController
// @RequestMapping("/wx/user/{appid}")
// public class WxAuthUserController {
//
//
//     @PostMapping("/account/oAuthLogin")
//     public Result oAuthLogin(@RequestBody OAuthLoginVo oAuthLoginVo) {
//         System.out.println(oAuthLoginVo.getUserInfo().getNickName());
//         //根据openId获取用户信息，如果不存在，那么就直接新增
//         UserInfo userInfoSearch = new UserInfo();
//         userInfoSearch.setOpenId(oAuthLoginVo.getUserInfo().getOpenId());
//         QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
//         queryWrapper.setEntity(userInfoSearch);
//         UserInfo one = userInfoService.getOne(queryWrapper);
//         if (null == one) {
//             userInfoService.save(oAuthLoginVo.getUserInfo());
//         }
//         Result Result = new Result();
//         //生成token,并返回
//         TokenData tokenData = getTokenData(one);
//         Result.setData(tokenData);
//         Result.setResult(true);
//         return Result;
//     }
//
//     private TokenData getTokenData(UserInfo one) {
//         TokenData tokenData = new TokenData();
//         String jwt = JwtTokenUtil.createJWT(String.valueOf(one.getId()), one.getNickName(), one.getRole(), audience);
//         tokenData.setAccessToken(jwt);
//         Audience audience2 = new Audience();
//         audience2.setClientId(audience.getClientId());
//         audience2.setExpiresSecond(60 * 60 * 24 * 30);
//         audience2.setName(audience.getName());
//         audience2.setBase64Secret(audience.getBase64Secret());
//         String jwtRefresh = JwtTokenUtil.createJWT(String.valueOf(one.getId()), one.getNickName(), one.getRole(), audience2);
//         tokenData.setRefreshToken(jwtRefresh);
//         return tokenData;
//     }
//
//     @PostMapping("/account/refreshToken")
//     public Result refreshToken(@RequestParam("token") String refreshToken) {
//         //判断当前token是否过期了，如果过期的话，前端拿refreshToken换个新的token
//         Result Result = new Result();
//         try {
//             Claims claims = Jwts.parser()
//                     .setSigningKey(DatatypeConverter.parseBase64Binary(audience.getBase64Secret()))
//                     .parseClaimsJws(refreshToken).getBody();
//             String username = JwtTokenUtil.getUsername(refreshToken, audience.getBase64Secret());
//             String userId = JwtTokenUtil.getUserId(refreshToken, audience.getBase64Secret());
//             //TODO: 根据用户名获取用户信息，再写入到token中返回
//             UserInfo userInfoSearch = new UserInfo();
//             userInfoSearch.setId(Long.parseLong(userId));
//             QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
//             queryWrapper.setEntity(userInfoSearch);
//             UserInfo one = userInfoService.getOne(queryWrapper);
//             TokenData tokenData = getTokenData(one);
//             Result.setData(tokenData);
//         } catch (ExpiredJwtException eje) {
//             log.error("===== Token过期 =====", eje);
//             throw new CustomException(ResultCode.REFRESH_PERMISSION_TOKEN_EXPIRED);
//         } catch (Exception ex) {
//             throw new CustomException(ResultCode.REFRESH_PERMISSION_TOKEN_INVALID);
//         }
//         Result.setResult(true);
//         return Result;
//     }
//


// @PostMapping("register")
// public Object register(@RequestBody String body, HttpServletRequest request) {
//     String username = JacksonUtil.parseString(body, "username");
//     String password = JacksonUtil.parseString(body, "password");
//     String mobile = JacksonUtil.parseString(body, "mobile");
//     String code = JacksonUtil.parseString(body, "code");
//     // 如果是小程序注册，则必须非空
//     // 其他情况，可以为空
//     String wxCode = JacksonUtil.parseString(body, "wxCode");
//
//     if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(mobile)
//     || StringUtils.isEmpty(code)) {
//     return ResponseUtil.badArgument();
//     }
//
//     List<LitemallUser> userList = userService.queryByUsername(username);
//     if (userList.size() > 0) {
//     return ResponseUtil.fail(AUTH_NAME_REGISTERED, "用户名已注册");
//     }
//
//     userList = userService.queryByMobile(mobile);
//     if (userList.size() > 0) {
//     return ResponseUtil.fail(AUTH_MOBILE_REGISTERED, "手机号已注册");
//     }
//     if (!RegexUtil.isMobileSimple(mobile)) {
//     return ResponseUtil.fail(AUTH_INVALID_MOBILE, "手机号格式不正确");
//     }
//     //判断验证码是否正确
//     String cacheCode = CaptchaCodeManager.getCachedCaptcha(mobile);
//     if (cacheCode == null || cacheCode.isEmpty() || !cacheCode.equals(code)) {
//     return ResponseUtil.fail(AUTH_CAPTCHA_UNMATCH, "验证码错误");
//     }
//
//     String openId = "";
//     // 非空，则是小程序注册
//     // 继续验证openid
//     if(!StringUtils.isEmpty(wxCode)) {
//     try {
//     WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(wxCode);
//     openId = result.getOpenid();
//     } catch (Exception e) {
//     e.printStackTrace();
//     return ResponseUtil.fail(AUTH_OPENID_UNACCESS, "openid 获取失败");
//     }
//     userList = userService.queryByOpenid(openId);
//     if (userList.size() > 1) {
//     return ResponseUtil.serious();
//     }
//     if (userList.size() == 1) {
//     LitemallUser checkUser = userList.get(0);
//     String checkUsername = checkUser.getUsername();
//     String checkPassword = checkUser.getPassword();
//     if (!checkUsername.equals(openId) || !checkPassword.equals(openId)) {
//     return ResponseUtil.fail(AUTH_OPENID_BINDED, "openid已绑定账号");
//     }
//     }
//     }
//
//     LitemallUser user = null;
//     BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
//     String encodedPassword = encoder.encode(password);
//     user = new LitemallUser();
//     user.setUsername(username);
//     user.setPassword(encodedPassword);
//     user.setMobile(mobile);
//     user.setWeixinOpenid(openId);
//     user.setAvatar("https://yanxuan.nosdn.127.net/80841d741d7fa3073e0ae27bf487339f.jpg?imageView&quality=90&thumbnail=64x64");
//     user.setNickname(username);
//     user.setGender((byte) 0);
//     user.setUserLevel((byte) 0);
//     user.setStatus((byte) 0);
//     user.setLastLoginTime(LocalDateTime.now());
//     user.setLastLoginIp(IpUtil.getIpAddr(request));
//     userService.add(user);
//
//     // 给新用户发送注册优惠券
//     couponAssignService.assignForRegister(user.getId());
//
//     // userInfo
//     UserInfo userInfo = new UserInfo();
//     userInfo.setNickName(username);
//     userInfo.setAvatarUrl(user.getAvatar());
//
//     // token
//     String token = UserTokenManager.generateToken(user.getId());
//
//     Map<Object, Object> result = new HashMap<Object, Object>();
//     result.put("token", token);
//     result.put("userInfo", userInfo);
//     return ResponseUtil.ok(result);
//     }

//
// }
